/**
 * 认证相关的工具函数
 */

const TOKEN_KEY = 'token';
const USER_KEY = 'user';

/**
 * 获取存储的令牌
 * @returns {string|null} 存储的令牌或null
 */
export function getToken() {
  return localStorage.getItem(TOKEN_KEY);
}

/**
 * 设置令牌
 * @param {string} token 要存储的令牌
 */
export function setToken(token) {
  localStorage.setItem(TOKEN_KEY, token);
}

/**
 * 移除令牌
 */
export function removeToken() {
  localStorage.removeItem(TOKEN_KEY);
}

/**
 * 获取当前用户信息
 * @returns {Object|null} 用户信息对象或null
 */
export function getUser() {
  const userStr = localStorage.getItem(USER_KEY);
  if (userStr) {
    try {
      return JSON.parse(userStr);
    } catch (e) {
      console.error('解析用户信息失败:', e);
    }
  }
  return null;
}

/**
 * 设置用户信息
 * @param {Object} user 用户信息对象
 */
export function setUser(user) {
  localStorage.setItem(USER_KEY, JSON.stringify(user));
}

/**
 * 移除用户信息
 */
export function removeUser() {
  localStorage.removeItem(USER_KEY);
}

/**
 * 清除所有认证信息
 */
export function clearAuth() {
  removeToken();
  removeUser();
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export function isLoggedIn() {
  return !!getToken();
}

/**
 * 检查用户是否有指定角色
 * @param {string|Array} roles 需要的角色
 * @returns {boolean} 是否有权限
 */
export function hasRole(roles) {
  const user = getUser();
  if (!user) return false;
  
  if (!Array.isArray(roles)) {
    roles = [roles];
  }
  
  return roles.includes(user.role);
} 